package beans.annotation.tape;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Transition标签清晰的列出了声明的方法被多个事务调用的情况。
 * 
 * @author yangjuntao@p-an.com 2013年11月19日
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Transition
{
	/**
	 * 触发的动作：如果你省略了on参数，系统会将该值默认为“*”，这样任何事件都可以触发该方法。
	 * 
	 * @return
	 */
	String on() default "*";

	/**
	 * 动作触发前的状态
	 * 
	 * @return
	 */
	String in();

	/**
	 * 动作触发后的状态：如果你省略了next参数，系统会将默认值改为“_self_”，这个是和当前的状态相关的， 如果你要实现一个循环的事务，你所需要做的就是省略状态机中的next参数。
	 * 
	 * @return
	 */
	String next() default "_self_";

	/**
	 * weight参数用于定义事务的查询顺序，一般的状态的事务是根据weight的值按升序排列的，weight默认的是0.
	 * 
	 * @return
	 */
	int weight() default 0;
}
